package com.hzit.manager.controller;

import com.hzit.manager.service.SentinelService;
import com.ruoyi.common.core.domain.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@RestController
@RequestMapping("/sentinel")
public class SentinelController {

	/**
	 * 1. 定义资源的第一种方式
	 */
	@Autowired
	private SentinelService sentinelService;
	@GetMapping("/res1")
	public R res1(){
		sentinelService.res1();
		return R.ok();
	}

	/**
	 * 2. 定义资源的第二种方式
	 * @return
	 */
	@GetMapping("/res2")
	public R res2(){
		sentinelService.res2();
		return R.ok();
	}


	/**
	 * 3. 定义资源的第三种方式（使用@SentinelResource注解）
	 */
	@GetMapping("/res3")
	public R res3(){
		sentinelService.res3();
		return R.ok();
	}

	/**
	 * 4. 普通资源的限流视图定制
	 */
	@GetMapping("/res4")
	public R res4(){

		return R.ok();
	}

	/**
	 * 5. 降级规则-慢调用比例
	 */
	@GetMapping("/testB")
	public R testB() throws InterruptedException {
		TimeUnit.SECONDS.sleep(1);
		return R.ok();
	}

	/**
	 * 5. 降级规则-异常比例
	 */
	@GetMapping("/testC")
	public R testC(int id) throws InterruptedException {
		if(id < 0){
			throw new RuntimeException("异常比例。");
		}
		return R.ok();
	}

	/**
	 * 5. 降级规则-异常数
	 */
	@GetMapping("/testD")
	public R testD(int id) throws InterruptedException {
		if(id < 0){
			throw new RuntimeException("异常数。");
		}
		return R.ok();
	}
}
